//app.js
const QQMapWX = require('./locale/qqmap-wx-jssdk.min.js')
let qqmapsdk;
qqmapsdk = new QQMapWX({
  key: 'XXOBZ-PKQWU-26BVI-4RPT3-LV5HQ-OIBQF'
});
const { getCity } = require('./utils/util.js')

App({
  onLaunch: function () {
    this.initPage();
  },
  initPage() {
    // 获取用户授权信息信息,防止重复出现授权弹框
    wx.getSetting({
      success: res => {
        //已有权限直接获得信息，否则出现授权弹框
        if (res.authSetting['scope.userFuzzyLocation']) {
          this.getUserLocation()
        } else {
          this.getUserLocation()
        }

        // 已有权限直接获得身份信息，否则出现授权弹框
        if (res.authSetting['scope.userInfo']) {
          this.getUserInfo()
        } else{
          // 首次进入 登录注册
          // this.login()
        }
      }
    })
  },
  // 有权限直接获得身份信息 
  getUserInfo() {
    var _this = this
    wx.getUserInfo({
      //成功授权
      success: (res) => {
        wx.login({
          success: function (res_1) {
            wx.getUserInfo({
              success: function (res_2) {
                wx.request({
                  url: _this.globalData.url + '/app/wx/miniProgramLogin',
                  method: 'POST',
                  header: {
                    'Accept': 'application/json'
                  },
                  data: {
                    code: res_1.code,
                    nickName: res_2.userInfo.nickName,  // 名字
                    avatarUrl: res_2.userInfo.avatarUrl,  // 头像地址
                    gender: res_2.userInfo.gender,
                    appid: wx.getAccountInfoSync().miniProgram.appId
                  },
                  success: function (res) {
                    _this.getUserMessage(res.data.data.consumerId)
                  }
                })
              }
            })
          }
        })
      }
    })
  },
  // 登录 拿到 consumerId
  login() {
    var _this = this;
    wx.login({
      success: function (res_1) {
        wx.request({
          url: _this.globalData.url + '/app/wx/miniProgramLogin',
          method: 'POST',
          header: {
            'Accept': 'application/json'
          },
          data: {
            code: res_1.code,
          },
          success: function (res) {
            console.log(res.data.data);
            _this.getUserMessage(res.data.data.consumerId)
          }
        })
      }
    })
  },
  // 通过 consumerId 获取用户信息
  getUserMessage(consumerId) {
    var _this = this;
    wx.request({
      url: _this.globalData.url + '/app/operate/getUserMessage',
      method: 'POST',
      header: {
        'Accept': 'application/json'
      },
      data: {
        consumerId,
      },
      success: function (res1) {
        const userInfo = res1.data.data
        wx.setStorage({
          key: 'userInfo',
          data: userInfo
        })
        _this.globalData.userInfo = userInfo
      }
    })
  },
  //获取用户的位置信息
  getUserLocation() {
    wx.getFuzzyLocation({
      //成功授权
      success: (res) => {
        const latitude = res.latitude;
        const longitude = res.longitude;
        // 使用腾讯地图接口将位置坐标转出成名称（为什么弹框出出现两次？）
        qqmapsdk.reverseGeocoder({
          location: {   //文档说location默认为当前位置可以省略，但是还是要手动加上，否则弹框会出现两次，手机端则出现问题
            latitude,
            longitude
          },
          success: (res) => {
            const cityFullname = res.result.address_component.city;
            const cityList = getCity();
            const cityId = cityList.filter(i => i.count === res.result.ad_info.city_code.slice(3))[0].id;
            const cityInfo = {
              latitude,
              longitude,
              cityName: cityFullname.substring(0, cityFullname.length - 1),
              cityCode: res.result.ad_info.adcode,
              cityId,
              addr: res.result.request_id,
              status: 1
            }
            this.globalData.userLocation = { ...cityInfo }   //浅拷贝对象
            this.globalData.selectCity = { ...cityInfo } //浅拷贝对象
            // 由于 getUserInfo 是网络请求，可能会在 Page.onLoad 之后才返回，所以此处加入 callback 以防止这种情况
            if (this.userLocationReadyCallback) {
              this.userLocationReadyCallback()
            }
          }
        })
      },
      fail: () => {
        this.globalData.userLocation = { status: 0 }
        //防止当弹框出现后，用户长时间不选择，
        if (this.userLocationReadyCallback) {
          this.userLocationReadyCallback()
        }
      }
    })
  },
  globalData: {
    userInfo: null,//用户信息
    userLocation: null, //用户的位置信息
    selectCity: null, //用户切换的城市
    isRefresh: false,
    selectCity: {},
    // url: 'http://ordertestcn.gnway.cc:8000',
    // url: 'http://zuozc.gnway.cc:8000'
    url: 'https://movieapi.cynmpw.cn'
  }
})